#include<iostream>
#include<unistd.h>
#include<signal.h>
using namespace std;

void PrintSignal(const sigset_t& pending)
{
    for(int i = 31; i >= 1; --i)
    {
        if(sigismember(&pending, i))
            cout << "1";
        else
            cout << "0";
    }
    cout << "\n" << endl;
}

void handler(int signo)
{
    cout << "get a signo, signo: " << signo << endl;
}

int main()
{
    sigset_t bset, oset;
    sigemptyset(&bset);
    sigemptyset(&oset);
    for(int i = 1; i <= 31; ++i)
    {
        sigaddset(&bset, i);
    }
    sigprocmask(SIG_SETMASK, &bset, &oset);
    sigset_t pending;
    sigemptyset(&pending);
    while(true)
    {
        int ret = sigpending(&pending);
        if(ret == -1)
            continue;
        PrintSignal(pending);
        sleep(1);
    }


    // signal(2, handler);
    // sigset_t bset, oset;
    // sigemptyset(&bset);
    // sigemptyset(&oset);
    // sigaddset(&bset, 2);
    // sigprocmask(SIG_SETMASK, &bset, &oset);
    // sigset_t pending;
    // sigemptyset(&pending);
    // int cnt = 0;
    // while(true)
    // {
    //     int ret = sigpending(&pending);
    //     if(ret == -1)
    //         continue;
    //     PrintSignal(pending);
    //     sleep(1);
    //     ++cnt;
    //     if(cnt == 20)
    //         sigprocmask(SIG_SETMASK, &oset, nullptr);
    // }

    return 0;
}